package cn.ffcs.bpmpvc.svc;

import java.util.List;

import cn.ffcs.bpm.model.ProcTranRecord;
import cn.ffcs.bpmpvc.dao.FlowPvcDao;
import cn.ffcs.bpmpvc.web.views.TaskView;

public interface TaskService
{
    public static final String TASK_COMMENT="";
    public static final String TASK_STATE_ACTIVE="active";
    public static final String TASK_STATE_END="end";
    public static final String NODE_TYPE_START="0";
    public static final String NODE_TYPE_END="1";
    public static final String NODE_TYPE_ACITVE="2";
    public static final String NODE_TYPE_FOK="3";
    public static final String NODE_TYPE_JOIN="4";
    
    public static final String TASK_TYPE[][]=new String[][]{{"01","正常"},{"02","转派"},{"03","传阅"}};
    /**
     * 保存任务信息（审核记录、人员预分配信息）
     * TODO 请输入方法说明
     * @param taskId
     * @param content
     * @param nextTasksList
     */
    public ProcTranRecord saveTaskAssignUser(String taskId,String content,List<TaskAssignBean> nextTasksList);
    /**
     * 
     * TODO 请输入方法说明
     * @param procTranRecord
     * @param content
     * @param nextTasksList
     */
    public ProcTranRecord saveTaskAssignUser(ProcTranRecord procTranRecord,String content,List<TaskAssignBean> nextTasksList);
    /**
     * 提交任务
     * TODO 请输入方法说明
     * @param taskId
     */    
    public ProcTranRecord completeTask(String taskId,List<TaskAssignBean> list);
    /**
     * 提交任务，并保存留言
     * TODO 请输入方法说明
     * @param taskId
     * @param content
     * @param nextTasksList
     */
    public ProcTranRecord completeTask(String taskId,String content,List<TaskAssignBean> nextTasksList);
    /**
     * 
     * TODO 请输入方法说明
     * @param procTranRecord
     * @param content
     * @param nextTasksList
     */
    public ProcTranRecord completeTask(ProcTranRecord procTranRecord, String content,List<TaskAssignBean> nextTasksList);
    /**
     * 流程任务回退
     * TODO 请输入方法说明
     * @param taskId
     */
    public void rollBackTask(String taskId,String content);
    /**
     * 流程任务回退
     * @param procTranRecord
     * @param content
     */
    public void rollBackTask(ProcTranRecord procTranRecord,String content);
    /**
     * 流程任务回收
     * TODO 请输入方法说明
     * @param taskId
     * @param content
     */
    public void recyclingTask(String taskId,String userId,String content);
    /**
     * 任务分配
     * TODO 请输入方法说明
     */
    public void assignTaskUser(String taskId,String userId);
    /**
     * 查看任务信息
     * TODO 请输入方法说明
     * @param taskId
     * @return
     */
    public TaskView getTaskView(String taskId);
    /**
     * 查看任务信息,可以根据条件得到下一节点
     * @param taskId
     * @param selCondition
     * @return
     */
    public TaskView getTaskView(String taskId,String selCondition,Object context);
    /**
     * 查找下一任务节点（单个或多个节点）
     * TODO 请输入方法说明
     * @param currentNodeId
     * @return
     */
    public List findNextTaskNodes(Integer currentNodeId);
    
    /**
     * 传阅功能
     * TODO 请输入方法说明
     * @param taskId
     * @param mattersContent
     * @param userIds
     */
    public void taskReadingToDo(String taskId,String mattersContent,String userIds[]);
    /**
     * 传阅功能
     * @param taskId
     * @param mattersContent
     * @param userIds
     * @param taskAppExt 业务扩展信息
     */
    public void taskReadingToDo(String taskId,String mattersContent,String userIds[],String taskAppExt);
    /**
     * 传阅功能
     * @param procTranRecord
     * @param mattersContent
     * @param userIds
     */
    public void taskReadingToDo(ProcTranRecord procTranRecord,String mattersContent,String userIds[]);
    /**
     * 任务转派
     * TODO 请输入方法说明
     * @param taskId
     * @param content
     * @param userId
     */
    public void taskTransferAsign(String taskId,String content,String userId);
    /**
     * 调整任务人员分配
     * @param taskId
     * @param userId
     */
    public void assignTaskToUser(String taskId, String userId);
    /**
     * 保存泳道角色
     * @param assignUserId
     * @param swinlaneName
     * @param procinstId
     */
    public void saveSwimlance(String assignUserId,String swinlaneName,Integer procinstId);
    
    public ProcTranRecord completeTaskAndProcess(String taskId, String content);
    public FlowPvcDao getFlowPvcDao();
}
